iT邦幫忙

2021 iThome 鐵人賽

DAY 19
4

前言

大家在查找程式碼時可能會看到 if __name__=='__main__': 這段 code,這個是什麼意思呢?

如果你寫程式時都只使用一個 Python 檔,那就不需要用到這段程式碼,但是如果要引用別的檔案就有可能會用到了!

開始吧!

我這邊沿用前一天寫的費氏數列的程式來舉例,以下兩段程式碼的輸出結果都是一樣的,但是為什麼要再加一行 if __name__=='__main__': 呢?

# a.py
def Fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return Fibonacci(n - 2) + Fibonacci(n - 1)
for i in range(3):
    print(Fibonacci(i))

# a.py
def Fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return Fibonacci(n - 2) + Fibonacci(n - 1)
if __name__=='__main__':
    for i in range(3):
        print(Fibonacci(i))

當我想要在別的檔案中使用我在 a.py 中定義的函式 Fibonacci(n) 時,如果在同一個目錄下有一個檔案 b.py 我把這個函式 Fibonacci(n) 引用至裡面。

底下的程式碼把 a.py 裡面的函式 Fibonacci import。我想要得到費氏數列的第五項,預期得到的結果應該是 5,但是如果沒有加上 if __name__=='__main__': 的話,輸出為

# b.py
from a import Fibonacci
x = Fibonacci(5)
print(x)

main.py 被引用的同時又被執行一次了!
所以 if __name__=='__main__': 這段程式碼在程式被引用時不會執行,只要自己在執行的時候會呼叫,這樣就可以避免呼叫別的檔案的函式時又被執行到。

a.py 加入 if __name__=='__main__': 之後再看 b.py 的輸出就會變下面這樣了。

 __name__ 是 python 中內建、隱含的變數,不必宣告即可用,當程式是直接執行時,__name__ 的值就是 __main__,當程式是被引用時,__name__ 的。

待續...


上一篇
【Day 18】遞迴 Recursion(續) 費氏數列與遞迴的限制
下一篇
【Day 20】Python 一行內輸入多個數字、多個字串及好用的刷題網站推薦
系列文
宇宙 69 大魔王的 python 世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言